package cn.edu.jxau.core.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import cn.edu.jxau.core.controller.ServiceResultConfig;
import cn.edu.jxau.core.exception.ServiceException;
import cn.edu.jxau.framework.dao.core.Session;
import cn.edu.jxau.framework.dao.core.sqlSessionFactory;

/*
 *@author 作者 :Harold
 *@version 创建时间：2017年9月3日 上午8:46:50
 */
public class StandardSpectrumService extends ServiceSupport{
	public StandardSpectrumService(){
		super();
	}
	
	public StandardSpectrumService(String view, Map<String, Object[]> params, Map<String, Object> data) throws ServiceException {
		/**
         * view service.xml中的name和视图对应
         * params request入口的参数数组
         * data 返回给Servlet的出口参数
         */
		super(view, params, data);
		execute(view, params, data); // 执行业务
        
	}
	
	/**
	 * 得到所有的标准光谱信息
	 * @param params 前台传来的参数
	 * @param data 后台返回的数据
	 */
	private void listAllStandardSpectrum(Map<String, String[]> params, Map<String, Object> data){
		Map<String, Object> param = new HashMap<String, Object>(); //用来封装传递给数据库的参数
        List<HashMap<String, Object>> datas = new ArrayList();  // 用来接收数据库返回回来的 	
        
        
        //通过数据库获得所有信息
        Session session=null;
        try {        	
            session = sqlSessionFactory.getInstance().getSession();         
            session.execute("listAllStandardSpectrum", param, datas);
            
        	// 成功返回success
        	data.put("result", ServiceResultConfig.SUCCESS);  
            //将参数封装到map中
            data.put("standardspectrum", datas);
           
            
        } catch (Exception e) {
        	e.printStackTrace();
        }
        finally{
        	//释放会话
            session.releaseConnection();
        }
	}
	
	/**
	 * 根据id得到具体的标准光谱
	 * @param params 传入的参数
	 * @param data 返回的结果
	 */
	private void getStandardSpectrum(Map<String, Object[]> params, Map<String, Object> data){
		Map<String, Object> param = new HashMap<String, Object>(); //用来封装传递给数据库的参数
        List<HashMap<String, Object>> datas = new ArrayList();  // 用来接收数据库返回回来的 	
        //拿到传入的Id参数       
        String Id = getParamStringValue(params, "Id", 0);
        //将Id封装到参数中
        param.put("Id", Id);
        //通过数据库获得所有信息
        Session session=null;
        try {
            session = sqlSessionFactory.getInstance().getSession();         
            session.execute("getStandardSpectrum", param, datas);
            
            //光谱类型id
            Integer spectrumTypeId = (Integer) datas.get(0).get("spectrumTypeId");
            //被检测物id
            Integer detectedID = (Integer)datas.get(0).get("detectedId");
            //用户id
            Integer userID = (Integer)datas.get(0).get("userId");
            
            //拿到用户名称
            param.put("userID", userID);
            session.execute("getUserByUserID", param, datas);
            String userName = (String) datas.get(1).get("name");
            //拿到检被测物          
            param.put("detectedID", detectedID);
            session.execute("getDetectedNameByDetectedID", param, datas);
            String detectedName = (String) datas.get(2).get("detectedName");
            //拿到光谱类型
            param.put("spectrumTypeId", spectrumTypeId);
            session.execute("getTypeByTypeID", param, datas);
            String spectrumType = (String) datas.get(3).get("spectrumType");           
            
           /* for(HashMap<String, Object> test: datas){               	
            	for (Entry<String, Object> entry : test.entrySet()) {
            		   System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
            	}
            }*/
            
            //移除除了标准光谱的数据
            datas.remove(1);
            datas.remove(1);
            datas.remove(1);
        	// 成功返回success
        	data.put("result", ServiceResultConfig.SUCCESS);   
        	//将需要的数据进行封装
            data.put("data", datas);
            data.put("username", userName);
            data.put("detectedname", detectedName);
            data.put("spectrumtype", spectrumType);
           
            
        } catch (Exception e) {
        	e.printStackTrace();
        }
        finally{
        	//释放会话
            session.releaseConnection();
        }
	}
	
	/**
	 * 获得标准库中所有可以使用的光谱类型
	 * @param params 传入的参数
	 * @param data 返回的结果
	 */
	private void listSpectrumType(Map<String, Object[]> params, Map<String, Object> data){
		Map<String, Object> param = new HashMap<String, Object>(); //用来封装传递给数据库的参数
        List<HashMap<String, Object>> datas = new ArrayList();  // 用来接收数据库返回回来的 	
        List<HashMap<String, Object>> data_type = new ArrayList();  // 用来接收数据库返回回来的 	
        
        //通过数据库获得所有信息
        Session session=null;
        try {        	
            session = sqlSessionFactory.getInstance().getSession();
            //得到标准光谱中所有用到的光谱类型id
            session.execute("getAllTypeInStandardSpectrum", param, datas);
            
            //遍历每个光谱类型id,来获得光谱类型名称
            for(HashMap<String, Object> spectrum : datas){                         	
            		   if(!("null".equals(spectrum.get("spectrumTypeId")))){
            			   param.put("spectrumTypeId", spectrum.get("spectrumTypeId"));
            			   session.execute("getTypeByTypeID", param, data_type);
            		   }
            	
            }
                       
        	// 成功返回success
        	data.put("result", ServiceResultConfig.SUCCESS);  
            //将参数封装到map中
            data.put("spectrumtype", data_type);
           
            
        } catch (Exception e) {
        	e.printStackTrace();
        }
        finally{
        	//释放会话
            session.releaseConnection();
        }
	}
	
	/**
	 * 根据不同的光谱类型，查询标准光谱库表，得到所有的检测物
	 * @param params 传入的参数
	 * @param data 返回的结果
	 */
	private void listDetectedObject(Map<String, Object[]> params, Map<String, Object> data){
		Map<String, Object> param = new HashMap<String, Object>(); //用来封装传递给数据库的参数
        List<HashMap<String, Object>> datas = new ArrayList();  // 用来接收数据库返回回来的 	
        List<HashMap<String, Object>> data_detected = new ArrayList();  // 用来接收数据库返回回来的 	
        
        //获得传入的光谱类型值
        String spectrumTypeId = getParamStringValue(params, "spectrumTypeId", 0);
        //将值传入param中
        param.put("spectrumTypeId", spectrumTypeId);
        
        //通过数据库获得所有信息
        Session session=null;
        try {        	
             session = sqlSessionFactory.getInstance().getSession();
            //得到标准光谱中所有用到的光谱类型id
            session.execute("getDetectedByType", param, datas);
            
            //遍历每个光谱类型id,获得被检测物名称
            for(HashMap<String, Object> spectrum : datas){                         	
            		   if(!("null".equals(spectrum.get("detectedId")))){
            			   param.put("detectedID", spectrum.get("detectedId"));
            			   session.execute("getDetectedNameByDetectedID", param, data_detected);
            		   }
            	
            }
                       
        	// 成功返回success
        	data.put("result", ServiceResultConfig.SUCCESS);  
            //将参数封装到map中
            data.put("detected_object", data_detected);
            data.put("standard_spectrum", datas);
           
            
        } catch (Exception e) {
        	e.printStackTrace();
        }
        finally{
        	//释放会话
            session.releaseConnection();
        }
	}
	
	/**
	 * 根据条件获取对应的标准光谱
	 * @param params 传入的参数
	 * @param data 返回的结果
	 */
	private void getStandardSpectrumByIndex(Map<String, Object[]> params, Map<String, Object> data){
		Map<String, Object> param = new HashMap<String, Object>(); //用来封装传递给数据库的参数
        List<HashMap<String, Object>> datas = new ArrayList();  // 用来接收数据库返回回来的 	
        
        //获得传入的标准光谱id
        String Id = getParamStringValue(params, "opptionid", 0);
        //将值传入param中
        param.put("Id", Id);
        System.out.println(Id);
        //通过数据库获得所有信息
        Session session=null;
        try {        	
            session = sqlSessionFactory.getInstance().getSession();         
            session.execute("getStandardSpectrum", param, datas);
            
        	// 成功返回success
        	data.put("result", ServiceResultConfig.SUCCESS);  
            //将参数封装到map中
            data.put("standardspectrum", datas);
           
            
        } catch (Exception e) {
        	e.printStackTrace();
        }
        finally{
        	//释放会话
            session.releaseConnection();
        }
	}
}
